//============================================================================
// Name        : lab2_2.cpp
// Author      : Binda&Aeolus
// Version     :
// Copyright   : Copyright 2011 Binda&Aeolus; All Rights Reserved
// Description : Hello World in C++, Ansi-style
//============================================================================

/*
 * 3.2  最少硬币问题（习题3-4）
问题描述：设有n种不同面值的硬币，各硬币的面值存于数组T[1:n]中。现要用这些面值的硬币来找钱。可以使用的各种面值的硬币个数存于数组Coins[1:n]中。对任意钱数0≤m≤20001，设计一个用最少硬币找钱m的方法。
算法设计：对于给定的1≤n≤10，硬币面值数组T和可以使用的各种面值的硬币个数数组Coins，以及钱数m，0≤m≤20001，计算找钱m的最少硬币数。
数据输入：由文件input.txt 提供输入数据，文件的第一行中只有1 个整数给出n的值,第2 行起每行2 个数，分别是T[j]和Coins[j]。最后1 行是要找的钱数m。
结果输出: 将计算出的最少硬币数输出到文件output.txt中。问题无解时输出-1。
 *
 */
#include <iostream>
#include <fstream>
#include "FileProcessor.cpp"
#include "MinCoins.h"
using namespace std;

int main() {


	FileProcessor fp;
    vector<int> data;
    const string infile_name = "input.txt";
    const string outfile_name = "output.txt";

    int values;//面值种数
    int total;//要换算的值
    fp.getdata(infile_name,data);//将文件的数据读入data中
    values=data[0];
    int *T=new int[values+1];//面值
    int *Coins=new int[values+1];//对应面值个数

    //变量初始化：根据题目规则从data取数据并对变量赋值
    for(int i=1,j=1;i<data.size();)
    {
    	T[j]=data[i++];
    	Coins[j]=data[i++];
    	j++;
    }
    total=data[data.size()-1];

/*
    for(int i=1;i<=values;i++)
    {
    	cout<<T[i]<<":"<<Coins[i]<<endl;
    }
    cout<<total<<endl;*/
     MinCoins mc;

     int result=mc.MakeChanges(T,Coins,total,values);


     remove(outfile_name.c_str());
     fp.output_data(outfile_name,result);//将结果输出






	return 0;
}

/*for (int j = 2; j >= 0; j--) {
	for (int k = 0; k < Coins[j]; k++) {
		total -= T[j];
		if (total < 0) {
			total += T[j];
			break;
		}
		sol[j]++;
	}
}

if (total == 0) {
	int num = 0;
	for (int i = 0; i < 3; i++) {
		num += sol[i];
		cout << T[i] << ":" << sol[i] << " ";
	}
} else
	cout << "No" << endl;*/
